﻿/*
 * Copyright (c) 2023, IMPERIAL-VISION. All rights reserved.
 *
 * Company:	Imperial-Vision
 * Author: 	huangguifei
 * Date:	2023/02/06
 *！！！！！本文件需与数据库模块配合使用
 *
 *
 *用户权限说明
 * 当前用户分为三个等级
 * 1、超级管理员为等级0，管理员为等级1，操作员为等级2
 * 2、超级管理员为硬编码id:ImperialVision,name:ImperialVision,password:ImperialVision
 * 3、超级管理员可以注册管理员和操作员，管理员允许注册操作员，操作员不允许注册新成员。
 * 4、权限高的账户可以删除权限低的账户，但是不允许修改信息，账户信息仅限本人账户登录修改。
 *
 *
 * 用户权限管理使用说明：
 * 1、复制目录下的resources文件夹到exe的运行目录
 * 2、包含头文件并初始化变量：#include "LoginDialog.h"
 * 2、初始化函数：
        void initLoginDialog()
        {
            bool isUse = true;
            LoginDialog loginDialog(LoginDialog::DialogType::DT_PAD);     //如果为触屏传入参数为DT_DT_PAD，如果为PC模式传入参数为：DT_PC（默认参数）
            //loginDialog.setWorkMode(1);//设置工作模式，详情见头文件
            if(QDialog::Accepted == loginDialog.exec()){
                int level = loginDialog.getLoginLevel();
                if(level == 0){
                    qDebug() << "login super admin";
                    //do something....
                }else if(level == 1){
                    qDebug() << "login admin";
                    //do something....
                }else if(level == 2){
                    qDebug() << "login user";
                    //do something....
                }
            } else {

            }
        }

        void EMainWindow::initLoginDialog()
        {
            //登录界面对话框
            pLoginDialog = new loginDialog(LoginDialog::DialogType::DT_TABLE);     //如果为触屏传入参数为DT_DT_PAD，如果为PC模式传入参数为：DT_PC（默认参数）
            if(QDialog::Accepted == pLoginDialog->exec()){
                int level = pLoginDialog->getLoginLevel();
                if(level == 0){
                    qDebug() << "login super admin";
                    setAdminControlEnable(true);
                }else if(level == 1){
                    qDebug() << "login admin";
                    setAdminControlEnable(true);
                }else if(level == 2){
                    qDebug() << "login user";
                    setAdminControlEnable(false);
                }
            } else {
                exit(0);
            }
        }
 */



#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>
#include <QKeyEvent>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QThread>
#include <QPointer>
#include <QStackedWidget>
#include <QTableWidget>
#include "UserWorker.h"

class LoginDialog : public QDialog
{
    Q_OBJECT
public:
    enum DialogType{
        DT_PC,
        DT_PAD,
    };
    enum WorkMode{
        WM_LOGIN,
        WM_MANAGE,
    };

    explicit LoginDialog(WorkMode wm = WM_LOGIN, DialogType dt = DT_PC,QWidget *parent = nullptr);
    ~LoginDialog();
    QStackedWidget* stkwgt;
    //page0 control
    QLineEdit *ledtWorkerID;
    QLineEdit *ledtPassword;
    QPushButton *pbtnLogin;
    QPushButton *pbtnUserManage;
    //page1 control
    QLabel* lblWorkerID;
    QLabel* lblWorkerName;
    QLabel* lblWorkerLevel;
    QTableWidget* tblwgtWorkerData;
    QPushButton  *pbtnLogout;
    QPushButton  *pbtnRegister;
    QPushButton  *pbtnModifyPassword;
    QPushButton  *pbtnModifyInfo;
    QPushButton  *pbtnDelete;
    QPushButton  *pbtnCancel;

    QString m_workID,m_name,m_password;//当前登录的用户ID，name
    static WorkerLevel CurrentLevel;//当前用户等级

    QJsonObject m_signUpInfo;//注册信息

    UserWorker* pUserWorker = nullptr;
    QPointer<QThread> pUserWorkerThread;

    bool isUserManage = false;
    WorkMode m_wm;//工作模式，用户登录，或，用户管理
    DialogType m_dt;//对话框类型，PC或触控屏

public:
    //static WorkerLevel getLoginLevel();
    QString getLoginWorkerID();
    QString getLoginWorkerName();
    std::string textEncry(const char* strI);
    std::string textDecry(const char* strI);
    //void setWorkMode(int workType);//设置工作模式，0为可进行用户管理，1为只管理员验证

private:
    void initUserWorker();
    void setupUI();
    void setPageStyle();
    void setControlStatus();


signals:
    void sglOperate(UserOptID optID,QJsonObject loginInfo);
    void sglLogout();
    void sglClose();
    void sglLoginSucceed();


public slots:
    void on_pbtnLogin_clicked();
    void on_pbtnUserManage_clicked();
    void on_pbtnLogout_clicked();
    void on_pbtnRegister_clicked();
    void on_pbtnModifyPassword_clicked();
    void on_pbtnModifyInfo_clicked();
    void on_pbtnDelete_clicked();
    void on_pbtnCancel_clicked();
    void onOperateResult(UserOptID optID,bool result,QJsonObject optObj);
    void onAllUserShow(QJsonArray allUser);

protected:
    virtual void keyPressEvent(QKeyEvent *event) override;
    virtual void closeEvent(QCloseEvent *event) override;
};

#endif // LOGINDIALOG_H
